package pkg16b_eca;

//Importerar alla paketen och klasser som vi behöver.
import java.awt.Color;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import pkg16b_eca.SQL.SQLCollection;
import pkg16b_eca.SQL.Tables.SQLSkadespelare;
import pkg16b_eca.data.validate.Person;
import pkg16b_eca.data.validate.Text;
import se.oru.informatik.InformatikException;
import pkg16b_eca.data.validate.Validate;

public class ECAFunctions extends SQLCollection {

    private final ECA ECAForm; //Use this to use controls in ECA.java. The controls in ECA.java must be protected and not private.
    private ArrayList<String> TempSearchResult = new ArrayList<>(); //Deklarerar en ArrayList som ska användas för metoden SokSkadespelare och RefillSearchResultWithTempStorage.
    protected SkadespelareProfil SkadespelareProfilForm = new SkadespelareProfil();
    
    public ECAFunctions(ECA eca) throws InformatikException {
        ECAForm = eca;
    }
    
    /**
     * Initializing the window.
     */
    protected void WindowOpened() {
        //When the main-window has loaded, also initialize this.
        //Don't show error messages until something goes wrong. Cleaning the error messages at start.
        ECAForm.jLblSkapaOchUppdateraSkadespelareError.setText("");
        ECAForm.jLblSkapaOchUppdateraAgentError.setText("");
        ECAForm.jLblSkapaOchUppdateraProduktionError.setText("");
        ECAForm.jLblSkapaOchUppdateraFormagaError.setText("");
        ECAForm.jLblSkapaOchUppdateraRollError.setText("");
        //Reset fields before start. (also so that all values is there)
        FormagaRensaFalt();
        ProduktionRensaFalt();
        RollRensaFalt();
        AgentRensaFalt();
        //SokOchMatcha controls that should be invisible at start.
        ECAForm.DynamicLabelSearchAndEarlierProd.setVisible(false);
        ECAForm.label3.setVisible(false);
        ECAForm.label2.setVisible(false);
        ECAForm.jScrollPane1.setVisible(false);
        ECAForm.SearchResultAndEarlierProductionsSkadespelare.setVisible(false);
        ECAForm.SkadespelareFormagar.setVisible(false);
        ECAForm.BackToSearchResult.setVisible(false);
        ECAForm.NameAndDescriptionSkadespelare.setVisible(false);
        ECAForm.EarlierRoles.setVisible(false);
        ECAForm.label1.setVisible(false);
        ECAForm.label4.setVisible(false);
        ECAForm.listSuggestedForTheseRoles.setVisible(false);
        ECAForm.jPanelSearchEngine.setVisible(true);
        ECAForm.jPanelSearchResultAndMatchRoles.setVisible(false);
        ECAForm.lstRolesSokOchMatchaMatcha.setVisible(false);
        ECAForm.lstSkadespelareSomMatcharSokOchMatchaMatcha.setVisible(false);
        ECAForm.chkMatchaMedAlder.setVisible(false);
        ECAForm.chkMatchaMedKon.setVisible(false);
        ECAForm.chkMatchaMedHarfarg.setVisible(false);
        ECAForm.chkMatchaMedLangd.setVisible(false);
        ECAForm.chkMatchaMedVikt.setVisible(false);
        
        ECAForm.label6.setVisible(false);
        ECAForm.label7.setVisible(false);
        ECAForm.label8.setVisible(false);
        ECAForm.label9.setVisible(false);
        ECAForm.btnBackToSearchEngine.setVisible(false);
        ECAForm.btnResetSokOchMatchaMatcha.setVisible(false);
        ECAForm.label10.setVisible(false);
        ECAForm.lstForeslagnaRollerSokOchMatchaMatcha.setVisible(false);
        ECAForm.jTxtArea.setVisible(false);
        ECAForm.jTxtForeslagenRollBeskrivningSokOchMatchaMatcha.setVisible(false);
        ECAForm.btnUpdateSkadePelareForslagenRoll.setVisible(false);
        

            FillUpProductionsInSokOchMatchaMatcha();
            (new Thread(new GraphicRefresher(this, ECAForm))).start();
    }
    
// <editor-fold defaultstate="collapsed" desc="SokOchMatcha"> 
    protected void FillSokOchMatcha() {
        //Refill SokOchMatcha "Sök" tab's controls with the values and strings below
        
        if (ECAForm.list1.getItemCount() > 0 || ECAForm.list2.getItemCount() > 0)
        {
            
        }
        else if (ECAForm.list1.getItemCount() == 0)
        {
            for (String formaga : getFormaga().getFormagor()) {
                ECAForm.list1.add(formaga);            
            }
        }
        
        if (ECAForm.jTxtSokOchMatchaSokAlder1.getText().equals("") //En if check som kollar om det är ingen text alls i komponenterna
                && ECAForm.jTxtSokOchMatchaSokAlder2.getText().equals("") //och om det är det, så sätter vi dom alla till 0.
                && ECAForm.jTxtSokOchMatchaSokLangd1.getText().equals("")
                && ECAForm.jTxtSokOchMatchaSokLangd2.getText().equals("")
                && ECAForm.jTxtSokOchMatchaSokVikt1.getText().equals("")
                && ECAForm.jTxtSokOchMatchaSokVikt2.getText().equals(""))
        {
            ECAForm.jTxtSokOchMatchaSokAlder1.setText("0");
            ECAForm.jTxtSokOchMatchaSokAlder2.setText("0");
            ECAForm.jTxtSokOchMatchaSokLangd1.setText("0");
            ECAForm.jTxtSokOchMatchaSokLangd2.setText("0");
            ECAForm.jTxtSokOchMatchaSokVikt1.setText("0");
            ECAForm.jTxtSokOchMatchaSokVikt2.setText("0");
        }
    }
    
    protected void MoveFromListToList(java.awt.List left, java.awt.List right) { 
        java.awt.List a = left;                                             
        java.awt.List b = right;
        // This method moves items between the list to the left and right in for example Sök Och Matcha "Sök" tab.
        if (a.getSelectedItems() != null && !a.getSelectedItems().toString().equals("")) //If the selected items from a is not null (does not contain a value/string)
        {                                                                                // and they do not equal nothing, then do the code in the for loops.
            for (String item : a.getSelectedItems()) {
                b.add(item);
            }
            for (String item : a.getSelectedItems()) {
                a.remove(item);
            }
            //ECAForm.list1.remove(ECAForm.list1.getSelectedIndexes());
        }
        else
        {
            System.out.println("the list a was null or empty, doing nothing.");
        }
    }
    
    protected void ResetSokOchMatchaSok() {
        //Den här metoden återställer allting gällande sökmotorn, samt resultaten osv. Så man
        //kan göra en ny sökning.

        ECAForm.list1.removeAll(); //Tar bort alla items (strängar) i dessa listor
        ECAForm.list2.removeAll();
        ECAForm.EarlierRoles.removeAll();
        ECAForm.listSuggestedForTheseRoles.removeAll();
        
        for (String formaga : getFormaga().getFormagor()) {
            ECAForm.list1.add(formaga);            
        }

        ECAForm.jTxtSokOchMatchaSokAlder1.setText("0"); //Sätter alla TextFields till 0
        ECAForm.jTxtSokOchMatchaSokAlder2.setText("0");
        ECAForm.jTxtSokOchMatchaSokLangd1.setText("0");
        ECAForm.jTxtSokOchMatchaSokLangd2.setText("0");
        ECAForm.jTxtSokOchMatchaSokVikt1.setText("0");
        ECAForm.jTxtSokOchMatchaSokVikt2.setText("0");

        ECAForm.DynamicLabelSearchAndEarlierProd.setVisible(false);
        ECAForm.label3.setVisible(false);
        ECAForm.label2.setVisible(false);
        ECAForm.SearchResultAndEarlierProductionsSkadespelare.setVisible(false);
        ECAForm.SkadespelareFormagar.setVisible(false);
        ECAForm.BackToSearchResult.setVisible(false);
        ECAForm.NameAndDescriptionSkadespelare.setVisible(false);
        ECAForm.EarlierRoles.setVisible(false);
        ECAForm.label1.setVisible(false);
        ECAForm.label4.setVisible(false);
        ECAForm.listSuggestedForTheseRoles.setVisible(false);
        ECAForm.jScrollPane1.setVisible(false);
        ECAForm.DynamicLabelSearchAndEarlierProd.setText("Sök Resultat");
        ECAForm.SkadespelareFormagar.removeAll();
        ECAForm.NameAndDescriptionSkadespelare.setText("");
        ECAForm.jTxtFieldSokOchMatchaSokTerm.setText("");
        ECAForm.jCmbBoxSokOchMatchaSokHarfarg1.setSelectedIndex(0);
        ECAForm.jCmbBoxSokOchMatchaSokKon1.setSelectedIndex(0);
        ECAForm.jCmbBoxSokOchMatchaSokOgonfarg1.setSelectedIndex(0);
        ECAForm.SearchResultAndEarlierProductionsSkadespelare.removeAll();
        ECAForm.jPanelSearchEngine.setVisible(true);
        ECAForm.jPanelSearchResultAndMatchRoles.setVisible(false);
        ECAForm.btnBackToSearchEngine.setVisible(false);
    }
     
    public void SokSkadespelare() {
        //Vi deklarerar en del variablar som vi behöver för att göra sökningen.
        String Namn = ECAForm.jTxtFieldSokOchMatchaSokTerm.getText();
        String AlderMin = ECAForm.jTxtSokOchMatchaSokAlder1.getText();
        String AlderMax = ECAForm.jTxtSokOchMatchaSokAlder2.getText();
        String LangdMin = ECAForm.jTxtSokOchMatchaSokLangd1.getText();
        String LangdMax = ECAForm.jTxtSokOchMatchaSokLangd2.getText();
        String ViktMin = ECAForm.jTxtSokOchMatchaSokVikt1.getText();
        String ViktMax = ECAForm.jTxtSokOchMatchaSokVikt2.getText();
        String Harfarg = ECAForm.jCmbBoxSokOchMatchaSokHarfarg1.getSelectedItem().toString();
        String Ogonfarg = ECAForm.jCmbBoxSokOchMatchaSokOgonfarg1.getSelectedItem().toString();
        String kon = Integer.toString(ECAForm.jCmbBoxSokOchMatchaSokKon1.getSelectedIndex() - 1); 
        String[] formagor = ECAForm.list2.getItems();

        if (TempSearchResult.isEmpty()) { //kör metodens första del, men bara om den temporära lagringen är tom, om den inter är det så kör den else satsen längst ner.

           if (Harfarg.equals("Välj")) { //Om Harfarg inte har blivit vald, gör detta
               Harfarg = "";
           }

           if (Ogonfarg.equals("Välj")) {
               Ogonfarg = "";
           }

           if (Text.parseNumber(AlderMin) <= 0 || Text.parseNumber(AlderMax) <= 0) { //Om AlderMin och AlderMax är lika med eller under 0. Gör detta.
               AlderMin = "-1";
               AlderMax = "-1";
           }

           if (Text.parseNumber(LangdMin) <= 0 || Text.parseNumber(LangdMax) <= 0) {
               LangdMin = "-1";
               LangdMax = "-1";
           }

           if (Text.parseNumber(ViktMin) <= 0 || Text.parseNumber(ViktMax) <= 0) {
               ViktMin = "-1";
               ViktMax = "-1";
           }

           //No need to use parseNumber on the strings when using IntPoints(,), because it uses it automatically within the function IntPoints.
           //
           for (String s : getSkadespelare().SokSkadespelare(Namn, new IntPoints(AlderMin, AlderMax), Text.parseNumber(kon), Harfarg, Ogonfarg, new IntPoints(LangdMin, LangdMax), new IntPoints(ViktMin, ViktMax), formagor)) {
               TempSearchResult.add(s); //Adds the data that was found in the search to a ArrayList, starting from 0 and until the search result did not yeild anymore.
               ECAForm.SearchResultAndEarlierProductionsSkadespelare.add(s); //Does the same here, except it adds the results to a simple List to display.
           }
        }
        else { //Kör den här else satsen om Arraylisten hade items i sig.
           TempSearchResult.clear(); //Rensar ur Arraylisten på alla poster i syfte att förhindra att vid nästa sökning så läggs det in information från den nya sökningen efter den gammla sökning. 
           //JOptionPane.showMessageDialog(null, "Rensade TempSearchResult ArrayList så att det inte ska bli dubletter i sökning (att listan lägger på samma information igen när du trycker på sök knappen igen).", "DEBUG!!!", JOptionPane.INFORMATION_MESSAGE);
           SokSkadespelare(); //Kör metoden ovanför igen samt kollar så att Arraylisten verkligen är tom.
           System.out.println(kon);
        }
    }
     
    protected void RefillSearchResultWithTempStorage() { //Fyller på resultatlistan med den senaste sökningsresultatet som gjordes utifall den har
        ECAForm.SearchResultAndEarlierProductionsSkadespelare.removeAll(); //Den här linjen tar bort namnena på dom tidigare produktionerna som den fylldes i med när man tryckte på ett namn i resultatlistan efter en sökning.
        for (String s : TempSearchResult) {                                     //tagits bort av diverse skäl (ex: att man har klickat på ett namn i resultat rutan, och sen bestämt sig
            ECAForm.SearchResultAndEarlierProductionsSkadespelare.add(s);       //för att gå tillbaka till sök resultaten.
        }
    }
     
    protected void FillUpEarlierProductionsList(String ActorName2) {
        if (ECAForm.SearchResultAndEarlierProductionsSkadespelare.getSelectedItem() != null && !ECAForm.SearchResultAndEarlierProductionsSkadespelare.getSelectedItem().toString().equals("")) {
            //Fyller på Arraylisten TempEarlierProductions Hashmap med datan från metoden getSkadespelare().getProduktioner().
            
        ArrayList<String> TempEarlierProductions = new ArrayList<>(); //Deklarerar en ArrayList som ska användas för metoden FillUpEarlierProductionsList
        for (HashMap<String, String> s : getSkadespelare().getProduktioner(ActorName2)) {
            TempEarlierProductions.add(s.get("titel"));
        }
        ECAForm.SearchResultAndEarlierProductionsSkadespelare.removeAll();

        try {
           Thread.sleep(50);
        } catch (InterruptedException ex) {
            Logger.getLogger(ECAFunctions.class.getName()).log(Level.SEVERE, null, ex);
        }

        for (String s : TempEarlierProductions) {
            ECAForm.SearchResultAndEarlierProductionsSkadespelare.add(s);
        } //För varje item i TempEarlierProduktions, kör koden ovan denna kommentar
            TempEarlierProductions.clear();
         //Rensa TempEarlierProductions för att förhindra dubletter.
        }
        else {
            System.out.println("There was no selection");
        }
    }

    protected void FillUpFormagarForActor(String ActorName2) {
        //If any of these two conditions reveal that a null value has been encountered, nothing will happen
        //if (ECAForm.SearchResultAndEarlierProductionsSkadespelare.getSelectedItem() != null && !ECAForm.SearchResultAndEarlierProductionsSkadespelare.getSelectedItem().toString().isEmpty()) {
            /*ArrayList<String> rvn = getSkadespelare().getFormagorNamn(ActorName2);
            ArrayList<String> TempActorFormagar = new ArrayList<>(); //-*- FillUpFormagarForActor
            
            //Call the getSkadespelare method, and the underlying method getFormagorNamn.
            //We insert the name that was selected from the result list, that will cause the methods to return
            //all the abilities (Formagor) of a certain actor, and insert then into a Arraylist called rvn.
            System.out.println(rvn.isEmpty() + "::::" + rvn.size());
            if (rvn != null && !rvn.isEmpty()) { //If rvn is not null, nor empty. Do this:
                for (String s : rvn) { //For each value in null, take it to the string s, and add
                    TempActorFormagar.add(s); //it to the Arraylist TempActorFormagor.
                }
                System.out.println(TempActorFormagar);
                ECAForm.SkadespelareFormagar.removeAll(); //Remove all current values from SkadespelareFormagor
                //This is to avoid any duplicates.
                try {
                    Thread.sleep(50);
                } catch (InterruptedException ex) {
                    Logger.getLogger(ECAFunctions.class.getName()).log(Level.SEVERE, null, ex);
                } //A short sleep of 50 milliseconds had been inserted to prevent overload.

                for (String s : TempActorFormagar) { //For each value in TempActorFormagor
                    System.out.println(s); //Print the value to the console for debugging purpose.
                    ECAForm.SkadespelareFormagar.add(s); //Then add the value to SkadespelareFormagor component in ECA.java
                    ECAForm.SkadespelareFormagar.revalidate();
                    ECAForm.SkadespelareFormagar.repaint();
                }
                System.out.println(TempActorFormagar.size());
                TempActorFormagar.clear(); //when everything is done in this method.
                //clear the TempActorFormagor so it can be used again for a new search.
            }*/
            
             ArrayList<String> formogor; //Read comments in the block between 119 and 130. Only difference is that we do not use HashMap here.
       
            formogor = getSkadespelare().getFormagorNamn(ActorName2);
        
            //Call the getSkadespelare method, and the underlying method getFormagorNamn.
            //We insert the name that was selected from the result list, that will cause the methods to return
            //all the abilities (Formagor) of a certain actor, and insert then into a Arraylist called rvn.
            System.out.println(formogor.isEmpty());
            if (!formogor.isEmpty()) { //If rvn is not null, nor empty. Do this:
                for (String s : formogor) { //For each value in null, take it to the string s, and add
                  ECAForm.SkadespelareFormagar.add(s);
                }
    }
            if (formogor.size() > 0) { // [2.2.2]
                formogor.clear();
            }
         
            
                
        //}
    }

    protected void getActorsAttributes(String name) {
        HashMap<String, String> rvn = getSkadespelare().getAttribut(name);
        //This method is used to insert all the attributes belonging to a
        //actor, besides the SID and AID, into the NameAndDescriptionSkadespelare
        //component in ECA.java. You can see here below what is done.

        String thisname = rvn.get("namn"); //grab the value and insert it into a string for later use
        String thiskon = Person.getKon(Text.parseNumber(rvn.get("kon"))).toString();
        String thisalder = rvn.get("alder");
        String thisvikt = rvn.get("vikt");
        String thislangd = rvn.get("langd");
        String thisharfarg = rvn.get("harfarg");
        String thisogonfarg = rvn.get("ogonfarg");

        ECAForm.NameAndDescriptionSkadespelare.setText( 
                "Namn: " + thisname + "\n" +  //We use \n to trigger a newline in order to structure the information into the component better.
                "Kön: " + thiskon + "\n" +
                "Ålder: " + thisalder + "\n" + 
                "Vikt: " + thisvikt + "\n" +
                "Längd(cm): " + thislangd + "\n" +
                "Hårfärg: " + thisharfarg + "\n" +
                "Ögonfärg: " + thisogonfarg);
    }

    protected void FillUpEarlierRoller(String ActorName2) {
        //Fyller på tidigare roller.
        ArrayList<String> TempEarlierRoller2 = new ArrayList<>();
        for (String s : getSkadespelare().getRoller(ActorName2)) { 
            TempEarlierRoller2.add(s);
        }

        for (String s : TempEarlierRoller2) {
            ECAForm.EarlierRoles.add(s);
        }
        TempEarlierRoller2.clear();
   } 

   protected void FillUpForeslagnaRoller(String ActorName2) {

       for (HashMap<String, String> s : getSkadespelare().getForslagenRoll(ActorName2)) {
           ECAForm.listSuggestedForTheseRoles.add(s.get("rnamn"));
       }
   }
   
   protected boolean SokValidateInput() {
        //Check if the input the user name is valid.
        //Check for validation errors.
        boolean errorOccurred = false;
        
        //Reset error label
        ECAForm.jLblSokOchMatchaSokErrorLabel.setText("");
        
        //If an error has occurred, errorOccurred will be true, always. Otherwise it'll stay false.
        //What this means is if it's true, it'll be true next time and next time and so on. If it's false, it could always change state to true if the validation would return an error (true).
       
        errorOccurred |= Validate.Number(ECAForm.jTxtSokOchMatchaSokAlder1, ECAForm.jLblSokOchMatchaSokAlder1);
        errorOccurred |= Validate.Number(ECAForm.jTxtSokOchMatchaSokAlder2, ECAForm.jLblSokOchMatchaSokAlder1);
        errorOccurred |= Validate.Number(ECAForm.jTxtSokOchMatchaSokLangd1, ECAForm.jLblSokOchMatchaSokLangd1);
        errorOccurred |= Validate.Number(ECAForm.jTxtSokOchMatchaSokLangd2, ECAForm.jLblSokOchMatchaSokLangd1);
        errorOccurred |= Validate.Number(ECAForm.jTxtSokOchMatchaSokVikt1, ECAForm.jLblSokOchMatchaSokVikt1);
        errorOccurred |= Validate.Number(ECAForm.jTxtSokOchMatchaSokVikt2, ECAForm.jLblSokOchMatchaSokVikt1);
       

        //If a problem was found, make the error labels red, and don't continue otherwise it's all correct.
        if (errorOccurred) {
            ECAForm.jLblSokOchMatchaSokErrorLabel.setText("<html>Det har uppstått fel, vänligen <br>kontrollera så att allting stämmer.</html>");
            return false; //Errors occurred during the validation, show errors and return.
        }
        return true; //Completed without errors.
    }
    // <editor-fold defaultstate="collapsed" desc="SokOchMatchaMatcha">
    
    //*****************************************************************************************
    //*Första steget: Fyll på listan Productions med alla produktioner från databasen         *
    //*Detta för att vi vill komma åt rollerna.                                               *
    //*Andra steget: Baserat på den produktion man valde, fyll på listan Roles med alla       *
    //*rollerna som tillhörde den Produktion vi valde i första steget.                        *
    //*Tredje Steget: Utifrån den roll vi valde, samt vilka checkboxes som är checkade,       *
    //*kör metoden getMatch som har booleans. För att matcha rollens data mot dom skådespelare*
    //*som stämmer överens med datan från roller, förutom RID, sen fyll listan                *
    //*SkadespelareSomMatchar med resultatet (skådespelarna som matchade)                     *
    //*****************************************************************************************                                                                                       *
    
    protected void FillUpProductionsInSokOchMatchaMatcha() { // [2.1.1]
        ECAForm.lstProductionsSokOchMatchaMatcha.removeAll();
        for (String a : getProduktion().getProduktioner()) {
            if (a != null) { // [2.1.1]
                ECAForm.lstProductionsSokOchMatchaMatcha.add(a);
            }
            else { System.out.println("Error: the String a in the method FillUpProductionsInSokOchMatchaMatcha was null, aborting the fillup procedure"); }
        }
    }
    
    protected void FillUpRoleListInSokOchMatchaMatcha(String ProductionName2) { // [2.1.2]
        ECAForm.lstRolesSokOchMatchaMatcha.removeAll();
        for (String b : getProduktion().getRoller(ProductionName2)) {
            if (b != null) { // [2.1.2]
                ECAForm.lstRolesSokOchMatchaMatcha.add(b);
            } else {System.out.println("Error: the String b in the method FillUpRoleListInSokOchMatchaMatcha was null, aborting the fillup procedure");}
            
        }
    }
    
    protected void FillUpSkadespelareSomMatcharRollInSokOchMatchaMatcha (String RollNamn2) { // [2.1.3]
        ECAForm.lstSkadespelareSomMatcharSokOchMatchaMatcha.removeAll();
        ECAForm.lstForeslagnaRollerSokOchMatchaMatcha.removeAll();
        for (String c : getRoll().getMatch(RollNamn2, ECAForm.chkMatchaMedAlder.getState(), ECAForm.chkMatchaMedKon.getState(), ECAForm.chkMatchaMedHarfarg.getState(), ECAForm.chkMatchaMedLangd.getState(), ECAForm.chkMatchaMedVikt.getState())){
            //System.out.println(c);
            if (c != null) { // [2.1.3]
                ECAForm.lstSkadespelareSomMatcharSokOchMatchaMatcha.add(c);
            } else {System.out.println("Error: the String c in the method FillUpSkadespelareSomMatcharRollInSokOchMatchaMatcha was null, aborting the fillup procedure");}
            
        }
       
        for (String s : getRoll().getMatch(RollNamn2, ECAForm.chkMatchaMedAlder.getState(), ECAForm.chkMatchaMedKon.getState(), ECAForm.chkMatchaMedHarfarg.getState(), ECAForm.chkMatchaMedLangd.getState(), ECAForm.chkMatchaMedVikt.getState(), 5)) {
            boolean exists = false;
            for (String x : ECAForm.lstSkadespelareSomMatcharSokOchMatchaMatcha.getItems()) {
                if (s.equalsIgnoreCase(x)) {
                    exists = true;
                    break;
                }
            }
            if (!exists) {
                ECAForm.lstForeslagnaRollerSokOchMatchaMatcha.add(s);
            }
        }
        //A small check to see if any actors was suggsested for any roles. And if so, do the code here.
        
    }
    //This method will be run if you press the "Acceptera button" in Sök Och Matcha Matcha tab. 
    protected void updateSkadepelareForslagenRoll() { // [1.2.1]
        //Check if any actors has been named at all in lstForeslagnaRollerSokOchMatchaMatcha
        if (ECAForm.lstForeslagnaRollerSokOchMatchaMatcha.getItemCount() > 0) {
            //We add the names from the list in order to the String, in a foor loop.
            for (String TempForeslagnaRoller1 : ECAForm.lstForeslagnaRollerSokOchMatchaMatcha.getItems()) {
                //By using the name we have in the loops current tick, we can use it to call the method to retrivie the SID from SKADESPELARE table.
                int _SID = getSkadespelare().getSkadespelareSID(TempForeslagnaRoller1);
                //Then, by using the role that was selected. We call on another method to obtain the RID in the ROLL table.
                int _RID = getRoll().getRollRID(ECAForm.lstRolesSokOchMatchaMatcha.getSelectedItem());
                //Check if the _SID and the _RID already exists in the SKADEPELARE_FORSLAGEN_ROLL, and if they do not. Then do this code.
                if (!getSkadespelare_Forslagen_Roll().exists(_SID, _RID)) {
                    
                    getSkadespelare_Forslagen_Roll().insertForeslagenRoll(_RID, _SID);
                }
            }
            //Clean out the list.
        ECAForm.lstForeslagnaRollerSokOchMatchaMatcha.removeAll(); // [1.2.1]
        //Inform the user trough text on the button that the task has been done.
        ECAForm.btnUpdateSkadePelareForslagenRoll.setText("Klart!");
        //Visual aid to show that it's done.
        Color color = new Color(70, 70, 70);
        ECAForm.btnUpdateSkadePelareForslagenRoll.setBackground(color);
        } else {System.out.println("No actors was in the list, thus nothing was done.");}
        
        
    }
    
    protected void updateProductionsGlobal() {
        ProduktionDatabaseInsert();
        ProduktionDatabaseUpdate();
        
    }
    
    // </editor-fold>
     
// </editor-fold>
    
// <editor-fold defaultstate="collapsed" desc="SkapaOchUppdatera"> 
    // <editor-fold defaultstate="collapsed" desc="Agent"> 
    
    /** Cleaning the agent's fields. Removing the text in the textboxes. */
    protected void AgentRensaFalt() {
        //Remove text
        ECAForm.jTxtSkapaOchUppdateraAgentAID.setText("");
        ECAForm.jTxtSkapaOchUppdateraAgentNamn.setText("");
        ECAForm.jTxtSkapaOchUppdateraAgentTelefon.setText("");
        ECAForm.jTxtSkapaOchUppdateraAgentMail.setText("");
    }

    /** Refresh the items in the tab agent in sök och matcha. */
    protected void AgentRefreshList() {
        //Refreshes the tab agent.
        //Used to keep the index of the list.
        int selectedAgent = ECAForm.jLstSkapaOchUppdateraAgentLista.getSelectedIndex();
        //Update list for agent.
        ECAForm.jLstSkapaOchUppdateraAgentLista.removeAll();
        for (String i : getAgent().getAgenter()) { //Receive a list of agents
            ECAForm.jLstSkapaOchUppdateraAgentLista.add(i); //Add items to list.
        }
        //This is to keep the index of the list when re-selecting.
        if (ECAForm.jLstSkapaOchUppdateraAgentLista.getItemCount() >= selectedAgent) {
            ECAForm.jLstSkapaOchUppdateraAgentLista.select(selectedAgent);
        }
    }

    /** Validate the textboxes on agent.
     * @return on error return false
     */
    protected boolean AgentValidateInput() {
        //Reset error colors
        ECAForm.jLblSkapaOchUppdateraAgentNamn.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraAgentTelefon.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraAgentMail.setForeground(Color.black);
        
        //Reset error label
        ECAForm.jLblSkapaOchUppdateraProduktionError.setText("");
        
        //Check if the input the user name is valid.
        //Check for errors.
        boolean errorOccurred = false;
        
        //If an error has occurred, errorOccurred will be true, always. Otherwise it'll stay false.
        //What this means is if it's true, it'll be true next time and next time and so on. If it's false, it could always change state to true if the validation would return an error (true).
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraAgentNamn, ECAForm.jLblSkapaOchUppdateraAgentNamn);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraAgentTelefon, ECAForm.jLblSkapaOchUppdateraAgentTelefon);
        errorOccurred |= Validate.Email(ECAForm.jTxtSkapaOchUppdateraAgentMail, ECAForm.jLblSkapaOchUppdateraAgentMail);

        //If a problem was found, make the labels with errors red, and don't continue otherwise if it's all correct.
        if (errorOccurred) {
            ECAForm.jLblSkapaOchUppdateraAgentError.setText("<html>Det har uppstått fel, vänligen <br>kontrollera så att allting stämmer.</html>");
            return false; //Errors occurred during the validation, show errors and return.
        }
        return true; //Completed without errors.
    }
    
    /** Change between an editable or viewable view mode. */
    protected void AgentEditable(boolean view) {
        //Change between editable view and locked view.
        ECAForm.jTxtSkapaOchUppdateraAgentNamn.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraAgentTelefon.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraAgentMail.setEditable(view);
        
        //If view == true then change the background color color to 255, and if it's false, change to the backgrond color 238
        Color bColor = view ? new Color(255,255,255) : new Color(238, 238, 238);
        
        //Set colors.
        ECAForm.jTxtSkapaOchUppdateraAgentNamn.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraAgentTelefon.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraAgentMail.setBackground(bColor);
    }
    
    /** Insert an agent into the database. */
    protected boolean AgentDatabaseInsert() {
        //Check validation
        if (!AgentValidateInput()) {
            return false;
        }
        
        //Check if the agent already exists. So there won't be any doublettes.
        if (getAgent().exists(ECAForm.jTxtSkapaOchUppdateraAgentNamn.getText())) return false;
        
        //Insert an agent to the database
        getAgent().insert(Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraAgentNamn.getText()),
                Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraAgentTelefon.getText()), 
                Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraAgentMail.getText()));

        AgentEditable(false); //Change to locked view mode.
        AgentRensaFalt(); //Clean the fields.
        AgentRefreshList(); //Refresh the list(s).
        return true;
    }
    
    /** Update an agent in the database. */
    protected boolean AgentDatabaseUpdate() {
        //Check validation input
        if (!AgentValidateInput()) {
            return false;
        }
        
        //Check so there is an item selected.
        if (ECAForm.jLstSkapaOchUppdateraAgentLista.getSelectedIndex() == -1) {
            return false;
        }
        
        //Check so it's the correct id and also check for doublettes, so there won't be any.
        if (Text.parseNumber(getSQLSelect("select agent.aid from agent where agent.namn='" + ECAForm.jTxtSkapaOchUppdateraAgentNamn.getText() + "'")) != Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraAgentAID.getText())
                        && getAgent().exists(ECAForm.jTxtSkapaOchUppdateraAgentNamn.getText())) {
            return false;
        }
        getAgent().update(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraAgentAID.getText()),
                    ECAForm.jTxtSkapaOchUppdateraAgentNamn.getText(),
                    ECAForm.jTxtSkapaOchUppdateraAgentTelefon.getText(), 
                    ECAForm.jTxtSkapaOchUppdateraAgentMail.getText());
        
        AgentEditable(false); //Change to locked view mode.
        AgentRefreshList(); //Refresh list(s)
        return true;
    }

    /** When the first button is pressed. */
    protected void ClickSkapaOchUppdateraAgentFirstButton() {
        //If the text is equal to what it says... try to insert an agent into the database.
        if (ECAForm.jBtnSkapaOchUppdateraAgentFirst.getText().equalsIgnoreCase("Lägg till ny agent")) {
            if (AgentDatabaseInsert()) {
                ECAForm.jBtnSkapaOchUppdateraAgentFirst.setText("Ändra agent");
                ECAForm.jBtnSkapaOchUppdateraAgentSecond.setText("Lägg till ny agent");
            }
        }
        //If the text is correct, try to update the agent into the database.
        else if (ECAForm.jBtnSkapaOchUppdateraAgentFirst.getText().equalsIgnoreCase("Spara agent") && 
                ECAForm.jBtnSkapaOchUppdateraAgentSecond.getText().equalsIgnoreCase("Avbryt")) {
            if (AgentDatabaseUpdate()) {
                ECAForm.jBtnSkapaOchUppdateraAgentFirst.setText("Ändra agent");
                ECAForm.jBtnSkapaOchUppdateraAgentSecond.setText("Lägg till ny agent");
            }
        }
        else if (ECAForm.jBtnSkapaOchUppdateraAgentFirst.getText().equalsIgnoreCase("Ändra agent")
            && (ECAForm.jLstSkapaOchUppdateraAgentLista.getSelectedIndex() >= 0)) {
            ECAForm.jBtnSkapaOchUppdateraAgentFirst.setText("Spara agent");
            ECAForm.jBtnSkapaOchUppdateraAgentSecond.setText("Avbryt");
            AgentEditable(true); //Change to edit mode, so that the user can edit the textboxes.
        }
    }

    /** When the second button is pressed. */
    protected void ClickSkapaOchUppdateraAgentSecondButton() {
        //Updating text and change modes...
        if (ECAForm.jBtnSkapaOchUppdateraAgentSecond.getText().equalsIgnoreCase("Lägg till ny agent")) {
            ECAForm.jBtnSkapaOchUppdateraAgentFirst.setText("Lägg till ny agent");
            ECAForm.jBtnSkapaOchUppdateraAgentSecond.setText("Avbryt");
            ECAForm.jLstSkapaOchUppdateraAgentLista.select(-1);
            AgentEditable(true); //Change to editable mode.
        } else if (ECAForm.jBtnSkapaOchUppdateraAgentSecond.getText().equalsIgnoreCase("Avbryt")) { //Ändra agent
            ECAForm.jBtnSkapaOchUppdateraAgentFirst.setText("Ändra agent");
            ECAForm.jBtnSkapaOchUppdateraAgentSecond.setText("Lägg till ny agent");
            AgentEditable(false); //Change to locked view mode.
        }
        
        AgentRefreshList(); //Refresh the list(s)
    }
    
    /** Select an agent and show information about it. */
    protected void AgentSelect(int index) {
        //Check so that the index isn't minus one.
        if (index != -1) {
            //Retrieve agents.
            ArrayList<String> agent = getSQLSelectMatrix("select AID, namn, telefon, mail"
                    + " from agent where lower(namn)='" + ECAForm.jLstSkapaOchUppdateraAgentLista.getItem(index).toLowerCase() + "'").get(0);
            
            //Write information out.
            ECAForm.jTxtSkapaOchUppdateraAgentAID.setText(agent.get(0));
            ECAForm.jTxtSkapaOchUppdateraAgentNamn.setText(Text.getSpecialCharacters(agent.get(1)));
            ECAForm.jTxtSkapaOchUppdateraAgentTelefon.setText(Text.getSpecialCharacters(agent.get(2)));
            ECAForm.jTxtSkapaOchUppdateraAgentMail.setText(Text.getSpecialCharacters(agent.get(3)));
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Förmåga">
        
    /** Cleaning the förmåga's fields. Removing the text in the textboxes. */
    protected void FormagaRensaFalt() {
        ECAForm.jTxtSkapaOchUppdateraFormagaFID.setText("");
        ECAForm.jTxtSkapaOchUppdateraFormagaNamn.setText("");
        ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning.setText("");
    }

    /** Refresh the items in the tab förmåga in sök och matcha. */
    protected void FormagaRefreshList() {
        //Refreshes the tab förmåga.
        //Used to keep the index of the list.
        int selectedFormaga = ECAForm.jLstSkapaOchUppdateraFormagaLista.getSelectedIndex();
        //Update list for förmåga.
        ECAForm.jLstSkapaOchUppdateraFormagaLista.removeAll();
        for (String i : getFormaga().getFormagor()) { //Receive a list of förmågor.
            ECAForm.jLstSkapaOchUppdateraFormagaLista.add(i); //Add items to list.
        }
        //This is to keep the index of the list when reselecting.
        if (ECAForm.jLstSkapaOchUppdateraFormagaLista.getItemCount() >= selectedFormaga) {
            ECAForm.jLstSkapaOchUppdateraFormagaLista.select(selectedFormaga);
        }
    }

    /** Validate the textboxes on förmåga.
     * @return on error return false
     */
    protected boolean FormagaValidateInput() {
        //Reset error colors
        ECAForm.jLblSkapaOchUppdateraFormagaNamn.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraFormagaBeskrivning.setForeground(Color.black);
        
        //Reset error label
        ECAForm.jLblSkapaOchUppdateraProduktionError.setText("");
        
        //Check if the input the user name is valid.
        //Check for errors.
        boolean errorOccurred = false;
        
        //If an error has occurred, errorOccurred will be true, always. Otherwise it'll stay false.
        //What this means is if it's true, it'll be true next time and next time and so on. If it's false, it could always change state to true if the validation would return an error (true).
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraFormagaNamn, ECAForm.jLblSkapaOchUppdateraFormagaNamn);
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning, ECAForm.jLblSkapaOchUppdateraFormagaBeskrivning);

        //If a problem was found, make the labels with errors red, and don't continue otherwise if it's all correct.
        if (errorOccurred) {
            ECAForm.jLblSkapaOchUppdateraFormagaError.setText("<html>Det har uppstått fel, vänligen <br>kontrollera så att allting stämmer.</html>");
            return false; //Errors occurred during the validation, show errors and return.
        }
        return true; //Completed without errors.
    }
    
    /** Change between an editable or viewable view mode. */
    protected void FormagaEditable(boolean view) {
        //Change between editable view and locked view.
        ECAForm.jTxtSkapaOchUppdateraFormagaNamn.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning.setEditable(view);
        
        //If view == true then change the background color color to 255, and if it's false, change to the backgrond color 238
        Color bColor = view ? new Color(255,255,255) : new Color(238, 238, 238);
        
        //Set colors.
        ECAForm.jTxtSkapaOchUppdateraFormagaNamn.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning.setBackground(bColor);
    }
    
    /** Insert an förmåga into the database. */
    protected boolean FormagaDatabaseInsert() {
        //Control validation
        if (!FormagaValidateInput()) {
            return false;
        }
        
        //Check if the förmåga already exists. So there won't be any doublettes.
        if (getFormaga().exists(ECAForm.jTxtSkapaOchUppdateraFormagaNamn.getText())) return false;
        
        //Insert an förmåga to the database
        getFormaga().insert(Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraFormagaNamn.getText()),
                Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning.getText()));

        FormagaEditable(false); //Change to locked view mode.
        FormagaRensaFalt(); //Clean the fields.
        FormagaRefreshList(); //Refresh the list(s).
        return true;
    }
    
    /** Update an förmåga in the database. */
    protected boolean FormagaDatabaseUpdate() {
        //Check validation input
        if (!FormagaValidateInput()) {
            return false;
        }
        
        //Check so there is an item selected.
        if (ECAForm.jLstSkapaOchUppdateraFormagaLista.getSelectedIndex() == -1) {
            return false;
        }
        
        //Check so it's the correct id and also check for doublettes, so there won't be any.
        if (Text.parseNumber(getSQLSelect("select formaga.fid from formaga where formaga.namn='" + ECAForm.jTxtSkapaOchUppdateraFormagaNamn.getText() + "'")) != Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraFormagaFID.getText())
                        && getFormaga().exists(ECAForm.jTxtSkapaOchUppdateraFormagaNamn.getText())) {
            return false;
        }
        getFormaga().update(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraFormagaFID.getText()),
                    ECAForm.jTxtSkapaOchUppdateraFormagaNamn.getText(),
                    ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning.getText());
        
        FormagaEditable(false); //Change to locked view mode.
        FormagaRefreshList(); //Refresh list(s)
        return true;
    }

    /** When the first button is pressed. */
    protected void ClickSkapaOchUppdateraFormagaFirstButton() {
        //If the text is equal to what it says... try to insert an förmåga into the database.
        if (ECAForm.jBtnSkapaOchUppdateraFormagaFirst.getText().equalsIgnoreCase("Lägg till ny förmåga")) {
            if (FormagaDatabaseInsert()) {
                ECAForm.jBtnSkapaOchUppdateraFormagaFirst.setText("Ändra förmåga");
                ECAForm.jBtnSkapaOchUppdateraFormagaSecond.setText("Lägg till ny förmåga");
            }
        }
        //If the text is correct, try to update the förmåga into the database.
        else if (ECAForm.jBtnSkapaOchUppdateraFormagaFirst.getText().equalsIgnoreCase("Spara förmåga") && 
                ECAForm.jBtnSkapaOchUppdateraFormagaSecond.getText().equalsIgnoreCase("Avbryt")) {
            if (FormagaDatabaseUpdate()) {
                ECAForm.jBtnSkapaOchUppdateraFormagaFirst.setText("Ändra förmåga");
                ECAForm.jBtnSkapaOchUppdateraFormagaSecond.setText("Lägg till ny förmåga");
            }
        }
        else if (ECAForm.jBtnSkapaOchUppdateraFormagaFirst.getText().equalsIgnoreCase("Ändra förmåga")
            && (ECAForm.jLstSkapaOchUppdateraFormagaLista.getSelectedIndex() >= 0)) {
            ECAForm.jBtnSkapaOchUppdateraFormagaFirst.setText("Spara förmåga");
            ECAForm.jBtnSkapaOchUppdateraFormagaSecond.setText("Avbryt");
            FormagaEditable(true); //Change to edit mode, so that the user can edit the textboxes.
        }
    }

    /** When the second button is pressed. */
    protected void ClickSkapaOchUppdateraFormagaSecondButton() {
        //Updating text and change modes...
        if (ECAForm.jBtnSkapaOchUppdateraFormagaSecond.getText().equalsIgnoreCase("Lägg till ny förmåga")) {
            ECAForm.jBtnSkapaOchUppdateraFormagaFirst.setText("Lägg till ny förmåga");
            ECAForm.jBtnSkapaOchUppdateraFormagaSecond.setText("Avbryt");
            ECAForm.jLstSkapaOchUppdateraFormagaLista.select(-1);
            FormagaEditable(true); //Change to editable mode.
        } else if (ECAForm.jBtnSkapaOchUppdateraFormagaSecond.getText().equalsIgnoreCase("Avbryt")) { //Ändra förmåga
            ECAForm.jBtnSkapaOchUppdateraFormagaFirst.setText("Ändra Förmåga");
            ECAForm.jBtnSkapaOchUppdateraFormagaSecond.setText("Lägg till ny förmåga");
            FormagaEditable(false); //Change to locked view mode.
        }
        
        FormagaRefreshList(); //Refresh the list(s)
    }
    
    /** Select an förmåga and show information about it. */
    protected void FormagaSelect(int index) {
        //Check so that the index isn't minus one.
        if (index != -1) {
            //Retrieve förmågas.
            ArrayList<String> formaga = getSQLSelectMatrix("select FID, namn, beskrivning"
                    + " from formaga where lower(namn)='" + ECAForm.jLstSkapaOchUppdateraFormagaLista.getItem(index).toLowerCase() + "'").get(0);
            
            //Write information out.
            ECAForm.jTxtSkapaOchUppdateraFormagaFID.setText(formaga.get(0));
            ECAForm.jTxtSkapaOchUppdateraFormagaNamn.setText(Text.getSpecialCharacters(formaga.get(1)));
            ECAForm.jTxtSkapaOchUppdateraFormagaBeskrivning.setText(Text.getSpecialCharacters(formaga.get(2)));
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Produktion">

    /** Cleaning the produktion's fields. Removing the text in the textboxes. */
    protected void ProduktionRensaFalt() {
        ECAForm.jTxtSkapaOchUppdateraProduktionPID.setText("");
        ECAForm.jTxtSkapaOchUppdateraProduktionTitel.setText("");
        ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.setText("0000-00-00");
        ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.setText("0000-00-00");
        ECAForm.jTxtSkapaOchUppdateraProduktionGenre.setText("");
    }

    /** Refresh the items in the tab produktion in sök och matcha. */
    protected void ProduktionRefreshList() {
        //Refreshes the tab produktion.
        //Used to keep the index of the list.
        int selectedProduktion = ECAForm.jLstSkapaOchUppdateraProduktionLista.getSelectedIndex();
        //Update list for produktion.
        ECAForm.jLstSkapaOchUppdateraProduktionLista.removeAll();
        for (String i : getProduktion().getProduktioner()) { //Retrieve a list of produktions
            ECAForm.jLstSkapaOchUppdateraProduktionLista.add(i);//Add items to list.
        }
        //This is to keep the index of the list when reselecting.
        if (ECAForm.jLstSkapaOchUppdateraProduktionLista.getItemCount() >= selectedProduktion) {
            ECAForm.jLstSkapaOchUppdateraProduktionLista.select(selectedProduktion);
        }
    }

    /** Validate the textboxes on produktion.
     * @return on error return false
     */
    protected boolean ProduktionValidateInput() {
        //Reset error colors
        ECAForm.jLblSkapaOchUppdateraProduktionTitel.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraProduktionInspelningsStart.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraProduktionInspelningsSlut.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraProduktionGenre.setForeground(Color.black);
        
        //Reset error label
        ECAForm.jLblSkapaOchUppdateraProduktionError.setText("");
        
        //Check if the input the user name is valid.
        //Check for errors.
        boolean errorOccurred = false;
        
        //If an error has occurred, errorOccurred will be true, always. Otherwise it'll stay false.
        //What this means is if it's true, it'll be true next time and next time and so on. If it's false, it could always change state to true if the validation would return an error (true).
        //true | false = true
        //false | false = false
        //true | true = true
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraProduktionTitel, ECAForm.jLblSkapaOchUppdateraProduktionTitel);
        errorOccurred |= Validate.Date(ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart, ECAForm.jLblSkapaOchUppdateraProduktionInspelningsStart);
        errorOccurred |= Validate.Date(ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut, ECAForm.jLblSkapaOchUppdateraProduktionInspelningsSlut);
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraProduktionGenre, ECAForm.jLblSkapaOchUppdateraProduktionGenre);

        //If a problem was found, make the labels with errors red, and don't continue otherwise if it's all correct.
        if (errorOccurred) {
            ECAForm.jLblSkapaOchUppdateraProduktionError.setText("<html>Det har uppstått fel, vänligen <br>kontrollera så att allting stämmer.</html>");
        }
        
        errorOccurred |= Validate.DateComparing(ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.getText(), ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.getText(), 
                                                ECAForm.jLblSkapaOchUppdateraProduktionError);
        
        return !errorOccurred; //If equals to true then completed without errors.
    }
    
    /** Change between an editable or viewable view mode. */
    protected void ProduktionEditable(boolean view) {
        //Change between editable view and locked view.
        ECAForm.jTxtSkapaOchUppdateraProduktionTitel.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraProduktionGenre.setEditable(view);
        
        //If view == true then change the background color color to 255, and if it's false, change to the backgrond color 238
        //         if    view    ==       true         ==        false
        Color bColor = view ? new Color(255,255,255) : new Color(238, 238, 238);
        
        //Set colors.
        ECAForm.jTxtSkapaOchUppdateraProduktionTitel.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraProduktionGenre.setBackground(bColor);
    }
    
    /** Insert an produktion into the database. */
    protected boolean ProduktionDatabaseInsert() {
        //Control validation
        if (!ProduktionValidateInput()) {
            return false;
        }
        
        //Check if the produktion already exists. So there won't be any doublettes.
        if (getProduktion().exists(ECAForm.jTxtSkapaOchUppdateraProduktionTitel.getText())) return false;
        
        //Insert an produktion to the database
        getProduktion().insert(Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraProduktionTitel.getText()),
                Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.getText()), 
                Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.getText()), 
                Text.getSafeSpecialCharacters(ECAForm.jTxtSkapaOchUppdateraProduktionGenre.getText()));

        ProduktionEditable(false); //Change to locked view mode.
        ProduktionRensaFalt(); //Clean the fields.
        ProduktionRefreshList(); //Refresh the list(s).
        FillUpProductionsInSokOchMatchaMatcha();
        return true;
    }
    
    /** Update an produktion in the database. */
    protected boolean ProduktionDatabaseUpdate() {
        //Check validation input
        if (!ProduktionValidateInput()) {
            return false;
        }
        
        //Check so there is an item selected.
        if (ECAForm.jLstSkapaOchUppdateraProduktionLista.getSelectedIndex() == -1) {
            return false;
        }
        
        //Check so it's the correct id and also check for doublettes, so there won't be any.
        if (Text.parseNumber(getSQLSelect("select produktion.pid from produktion where produktion.titel='" + ECAForm.jTxtSkapaOchUppdateraProduktionTitel.getText() + "'")) != Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraProduktionPID.getText())
                        && getProduktion().exists(ECAForm.jTxtSkapaOchUppdateraProduktionTitel.getText())) {
            return false;
        }
        getProduktion().update(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraProduktionPID.getText()),
                    ECAForm.jTxtSkapaOchUppdateraProduktionTitel.getText(),
                    ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.getText(), 
                    ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.getText(), 
                    ECAForm.jTxtSkapaOchUppdateraProduktionGenre.getText());
        
        ProduktionEditable(false); //Change to locked view mode.
        ProduktionRefreshList(); //Refresh list(s)
        FillUpProductionsInSokOchMatchaMatcha();
        return true;
    }

    /** When the first button is pressed. */
    protected void ClickSkapaOchUppdateraProduktionFirstButton() {
        //If the text is equal to what it says... try to insert an produktion into the database.
        if (ECAForm.jBtnSkapaOchUppdateraProduktionFirst.getText().equalsIgnoreCase("Lägg till ny produktion")) {
            if (ProduktionDatabaseInsert()) {
                ECAForm.jBtnSkapaOchUppdateraProduktionFirst.setText("Ändra produktion");
                ECAForm.jBtnSkapaOchUppdateraProduktionSecond.setText("Lägg till ny produktion");
            }
        }
        //If the text is correct, try to update the produktion into the database.
        else if (ECAForm.jBtnSkapaOchUppdateraProduktionFirst.getText().equalsIgnoreCase("Spara produktion") && 
                ECAForm.jBtnSkapaOchUppdateraProduktionSecond.getText().equalsIgnoreCase("Avbryt")) {
            if (ProduktionDatabaseUpdate()) {
                ECAForm.jBtnSkapaOchUppdateraProduktionFirst.setText("Ändra produktion");
                ECAForm.jBtnSkapaOchUppdateraProduktionSecond.setText("Lägg till ny produktion");
            }
        }
        else if (ECAForm.jBtnSkapaOchUppdateraProduktionFirst.getText().equalsIgnoreCase("Ändra produktion")
            && (ECAForm.jLstSkapaOchUppdateraProduktionLista.getSelectedIndex() >= 0)) {
            ECAForm.jBtnSkapaOchUppdateraProduktionFirst.setText("Spara produktion");
            ECAForm.jBtnSkapaOchUppdateraProduktionSecond.setText("Avbryt");
            ProduktionEditable(true); //Change to edit mode, so that the user can edit the textboxes.
        }
    }

    /** When the second button is pressed. */
    protected void ClickSkapaOchUppdateraProduktionSecondButton() {
        //Updating text and change modes...
        if (ECAForm.jBtnSkapaOchUppdateraProduktionSecond.getText().equalsIgnoreCase("Lägg till ny produktion")) {
            ECAForm.jBtnSkapaOchUppdateraProduktionFirst.setText("Lägg till ny produktion");
            ECAForm.jBtnSkapaOchUppdateraProduktionSecond.setText("Avbryt");
            ECAForm.jLstSkapaOchUppdateraProduktionLista.select(-1);
            ProduktionEditable(true); //Change to editable mode.
        } else if (ECAForm.jBtnSkapaOchUppdateraProduktionSecond.getText().equalsIgnoreCase("Avbryt")) {
            ECAForm.jBtnSkapaOchUppdateraProduktionFirst.setText("Ändra produktion");
            ECAForm.jBtnSkapaOchUppdateraProduktionSecond.setText("Lägg till ny produktion");
            ProduktionEditable(false); //Change to locked view mode.
            ProduktionRensaFalt();
        }
        
        ProduktionRefreshList(); //Refresh the list(s)
    }
    
    /** Select an produktion and show information about it. */
    protected void ProduktionSelect(int index) {
        //Check so that the index isn't minus one.
        if (index != -1) {
            //Retrieve produktions.
            ArrayList<String> produktion = getSQLSelectMatrix("select PID, titel, inspelningstart, inspelningslut, genre"
                    + " from produktion where lower(titel)='" + ECAForm.jLstSkapaOchUppdateraProduktionLista.getItem(index).toLowerCase() + "'").get(0);
            
            //Write information out.
            ECAForm.jTxtSkapaOchUppdateraProduktionPID.setText(produktion.get(0));
            ECAForm.jTxtSkapaOchUppdateraProduktionTitel.setText(Text.getSpecialCharacters(produktion.get(1)));
            ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsStart.setText(Text.getSpecialCharacters(produktion.get(2)));
            ECAForm.jTxtSkapaOchUppdateraProduktionInspelningsSlut.setText(Text.getSpecialCharacters(produktion.get(3)));
            ECAForm.jTxtSkapaOchUppdateraProduktionGenre.setText(Text.getSpecialCharacters(produktion.get(4)));
        }
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Roll">

    /** Cleaning the roll's fields. Removing the text in the textboxes. */
    protected void RollRensaFalt() {
        //Remove text and cleans up
        ECAForm.jTxtSkapaOchUppdateraRollNamn.setText("");
        ECAForm.jTxtSkapaOchUppdateraRollAlder.setText("");
        ECAForm.jTxtSkapaOchUppdateraRollLangd.setText("");
        ECAForm.jTxtSkapaOchUppdateraRollVikt.setText("");
        ECAForm.jTxtSkapaOchUppdateraRollBeskrivning.setText("");
        
        ECAForm.jCmbBoxSkapaOchUppdateraRollKon.setSelectedItem("");
        ECAForm.jCmbBoxSkapaOchUppdateraRollHarfarg.setSelectedItem("");
        
        //Reset förmågor
        ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.removeAll();
        ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.removeAll();

        for (String formaga : getFormaga().getFormagor()) {
            ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.add(formaga);
        }
    }

    /** Refresh the items in the tab roll in sök och matcha. */
    protected void RollRefreshList() {
        //Refreshes the tab roll.
        //Used to keep the index of the lists.
        int selectedRoll = ECAForm.jLstSkapaOchUppdateraRollLista.getSelectedIndex();
        int selectedRollSkadespelare = ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getSelectedIndex();
        int selectedRollProduktioner = ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getSelectedIndex();

        //Update list for roll.
        ECAForm.jLstSkapaOchUppdateraRollLista.removeAll();
        for (String i : getRoll().getRoller()) {
            ECAForm.jLstSkapaOchUppdateraRollLista.add(i);
        }

        //Update list for skådespelare in roller.
        ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.removeAll();
        for (String i : getSkadespelare().getSkadespelare()) {
            ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.add(i);
        }

        //Update list for produktioner in roller.
        ECAForm.jLstSkapaOchUppdateraRollListaProduktion.removeAll();
        for (String i : getProduktion().getProduktioner()) {
            ECAForm.jLstSkapaOchUppdateraRollListaProduktion.add(i);
        }

        //This is to keep the index of the lists.
        if (ECAForm.jLstSkapaOchUppdateraRollLista.getItemCount() >= selectedRoll) {
            ECAForm.jLstSkapaOchUppdateraRollLista.select(selectedRoll);
        }

        if (ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getItemCount() >= selectedRollSkadespelare) {
            ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.select(selectedRollSkadespelare);
        }

        if (ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getItemCount() >= selectedRollProduktioner) {
            ECAForm.jLstSkapaOchUppdateraRollListaProduktion.select(selectedRollProduktioner);
        }
    }

    /** Validate the textboxes on roll.
     * @return on error return false
     */
    protected boolean RollValidateInput() {
        //Check if the input the user name is valid.
        //Check for validation errors.
        boolean errorOccurred = false;
        
        //Reset error label
        ECAForm.jLblSkapaOchUppdateraProduktionError.setText("");
        
        //If an error has occurred, errorOccurred will be true, always. Otherwise it'll stay false.
        //What this means is if it's true, it'll be true next time and next time and so on. If it's false, it could always change state to true if the validation would return an error (true).
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraRollNamn, ECAForm.jLblSkapaOchUppdateraRollNamn);
        errorOccurred |= Validate.Object(ECAForm.jCmbBoxSkapaOchUppdateraRollKon, ECAForm.jLblSkapaOchUppdateraRollKon);
        errorOccurred |= Validate.Object(ECAForm.jCmbBoxSkapaOchUppdateraRollHarfarg, ECAForm.jLblSkapaOchUppdateraRollHarfarg);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraRollAlder, ECAForm.jLblSkapaOchUppdateraRollAlder);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraRollLangd, ECAForm.jLblSkapaOchUppdateraRollLangd);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraRollVikt, ECAForm.jLblSkapaOchUppdateraRollVikt);
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraRollBeskrivning, ECAForm.jLblSkapaOchUppdateraRollBeskrivning);
        errorOccurred |= Validate.Object(ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare, ECAForm.jLblSkapaOchUppdateraRollError, "<html>Du måste välja en skådespelare.</html>");
        errorOccurred |= Validate.Object(ECAForm.jLstSkapaOchUppdateraRollListaProduktion, ECAForm.jLblSkapaOchUppdateraRollError, "<html>Du måste välja en produktion.</html>");

        //If a problem was found, make the error labels red, and don't continue otherwise it's all correct.
        if (errorOccurred) {
            ECAForm.jLblSkapaOchUppdateraRollError.setText("<html>Det har uppstått fel, vänligen <br>kontrollera så att allting stämmer.</html>");
            return false; //Errors occurred during the validation, show errors and return.
        }
        return true; //Completed without errors.
    }
    
    /** Change between an editable or viewable view mode. */
    protected void RollEditable(boolean view) {
        //Change between editable view and locked view.
        ECAForm.jTxtSkapaOchUppdateraRollNamn.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraRollAlder.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraRollLangd.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraRollVikt.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraRollBeskrivning.setEditable(view);
        
        ECAForm.jCmbBoxSkapaOchUppdateraRollKon.setEnabled(view);
        ECAForm.jCmbBoxSkapaOchUppdateraRollHarfarg.setEnabled(view);
        
        ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.setEnabled(view);
        ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.setEnabled(view);
        
        //If view == true then change the background color color to 255, and if it's false, change to the backgrond color 238
        Color bColor = view ? new Color(255,255,255) : new Color(238, 238, 238);
        
        //Set colors.
        ECAForm.jTxtSkapaOchUppdateraRollNamn.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraRollAlder.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraRollLangd.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraRollVikt.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraRollBeskrivning.setBackground(bColor);
        
        //Enable and disable lists, depends on the mode you're being in.
        ECAForm.jLstSkapaOchUppdateraRollLista.setEnabled(!view);
        ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.setEnabled(view);
        ECAForm.jLstSkapaOchUppdateraRollListaProduktion.setEnabled(view);
    }
    
    /** Insert an roll into the database. */
    protected boolean RollDatabaseInsert() {
        //Control validation
        if (!RollValidateInput()) {
            return false;
        }
        
        //Check if the roll already exists. So there won't be any doublettes.
        if (getRoll().exists(ECAForm.jTxtSkapaOchUppdateraRollNamn.getText())) return false;
        
        //Add a roll to the database
        getRoll().insert(ECAForm.jTxtSkapaOchUppdateraRollNamn.getText(),
                ECAForm.jTxtSkapaOchUppdateraRollBeskrivning.getText(), 
                ECAForm.jCmbBoxSkapaOchUppdateraRollHarfarg.getSelectedItem().toString(), 
                ECAForm.jCmbBoxSkapaOchUppdateraRollKon.getSelectedItem().toString(), 
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollAlder.getText()), 
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollLangd.getText()), 
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollVikt.getText()), 
                Text.parseNumber(getSQLSelect("select skadespelare.SID from skadespelare where skadespelare.namn='" + ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getSelectedItem().toString() + "'")), 
                Text.parseNumber(getSQLSelect("select produktion.PID from produktion where produktion.titel='" + ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getSelectedItem().toString() + "'")));

        //When updating check if the connection between roll and förmåga exists, if it's not, add the connection.
        for (String selectedFormaga : ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.getItems()) {
            if (!getRoll_Kraver_Formaga().exists(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()), getRoll().getRollRID(selectedFormaga))) {
                getRoll_Kraver_Formaga().insertFormagaToRoll(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()), getRoll().getRollRID(selectedFormaga));
            }
        }
        
        RollEditable(false); //Change to locked view mode.
        RollRensaFalt(); //Clean the fields.
        RollRefreshList(); //Refresh the list(s).
        return true;
    }
    
    /** Update an roll in the database. */
    protected boolean RollDatabaseUpdate() {
        if (!RollValidateInput()) {
            return false;
        }
        
        //Check so there is an item selected.
        if (ECAForm.jLstSkapaOchUppdateraRollLista.getSelectedIndex() == -1) {
            return false;
        }
        
        //Check so it's the correct id and also check for doublettes, so there won't be any.
        if (Text.parseNumber(getSQLSelect("select roll.rid from roll where roll.namn='" + ECAForm.jTxtSkapaOchUppdateraRollNamn.getText() + "'")) != Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText())
                        && getRoll().exists(ECAForm.jTxtSkapaOchUppdateraRollNamn.getText())) {
            return false;
        }
        
        getRoll().update(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()),
                ECAForm.jTxtSkapaOchUppdateraRollNamn.getText(),
                ECAForm.jTxtSkapaOchUppdateraRollBeskrivning.getText(), 
                ECAForm.jCmbBoxSkapaOchUppdateraRollHarfarg.getSelectedItem().toString(), 
                ECAForm.jCmbBoxSkapaOchUppdateraRollKon.getSelectedItem().toString(), 
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollAlder.getText()), 
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollLangd.getText()), 
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollVikt.getText()), 
                Text.parseNumber(getSQLSelect("select skadespelare.SID from skadespelare where skadespelare.namn='" + ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getSelectedItem().toString() + "'")), 
                Text.parseNumber(getSQLSelect("select produktion.PID from produktion where produktion.titel='" + ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getSelectedItem().toString() + "'")));
        
        //When updating check if the connection between roll and förmåga exists, if it's not, add the connection.
        for (String selectedFormaga : ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.getItems()) {
            if (!getRoll_Kraver_Formaga().exists(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()), getFormaga().getFormagaFID(selectedFormaga))) {
                getRoll_Kraver_Formaga().insertFormagaToRoll(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()), getFormaga().getFormagaFID(selectedFormaga));
            }
        }

        //When updating check if a connection between skådespelare and förmåga exists, and if the user wants to remove them, if it does exist, remove it.
        for (String notSelectedFormaga : ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.getItems()) {
            if (getRoll_Kraver_Formaga().exists(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()), getFormaga().getFormagaFID(notSelectedFormaga))) {
                getRoll_Kraver_Formaga().deleteFormagaFromRoll(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraRollRID.getText()), getFormaga().getFormagaFID(notSelectedFormaga));
            }
        }
                
        RollEditable(false); //Change to locked view mode.
        RollRefreshList(); //Refresh list(s)
        return true;
    }

    /** When the first button is pressed. */
    protected void ClickSkapaOchUppdateraRollFirstButton() {
        //If the text is equal to what it says... try to insert an roll into the database.
        if (ECAForm.jBtnSkapaOchUppdateraRollFirst.getText().equalsIgnoreCase("Lägg till ny roll")) {
            if (RollDatabaseInsert()) {
                ECAForm.jBtnSkapaOchUppdateraRollFirst.setText("Ändra roll");
                ECAForm.jBtnSkapaOchUppdateraRollSecond.setText("Lägg till ny roll");
            }
        }
        //If the text is correct, try to update the roll into the database.
        else if (ECAForm.jBtnSkapaOchUppdateraRollFirst.getText().equalsIgnoreCase("Spara roll") && 
                ECAForm.jBtnSkapaOchUppdateraRollSecond.getText().equalsIgnoreCase("Avbryt")) {
            if (RollDatabaseUpdate()) {
                ECAForm.jBtnSkapaOchUppdateraRollFirst.setText("Ändra roll");
                ECAForm.jBtnSkapaOchUppdateraRollSecond.setText("Lägg till ny roll");
            }
        }
        else if (ECAForm.jBtnSkapaOchUppdateraRollFirst.getText().equalsIgnoreCase("Ändra roll")
            && (ECAForm.jLstSkapaOchUppdateraRollLista.getSelectedIndex() >= 0)) {
            ECAForm.jBtnSkapaOchUppdateraRollFirst.setText("Spara roll");
            ECAForm.jBtnSkapaOchUppdateraRollSecond.setText("Avbryt");
            RollEditable(true); //Change to edit mode, so that the user can edit the textboxes.
        }
    }

    /** When the second button is pressed. */
    protected void ClickSkapaOchUppdateraRollSecondButton() {
        //Updating text and change modes...
        if (ECAForm.jBtnSkapaOchUppdateraRollSecond.getText().equalsIgnoreCase("Lägg till ny roll")) {
            ECAForm.jBtnSkapaOchUppdateraRollFirst.setText("Lägg till ny roll");
            ECAForm.jBtnSkapaOchUppdateraRollSecond.setText("Avbryt");
            ECAForm.jLstSkapaOchUppdateraRollLista.select(-1);
            RollEditable(true); //Change to editable mode.
        } else if (ECAForm.jBtnSkapaOchUppdateraRollSecond.getText().equalsIgnoreCase("Avbryt")) { //Ändra förmåga
            ECAForm.jBtnSkapaOchUppdateraRollFirst.setText("Ändra roll");
            ECAForm.jBtnSkapaOchUppdateraRollSecond.setText("Lägg till ny roll");
            RollEditable(false); //Change to locked view mode.
        }
        
        RollRefreshList(); //Refresh the list(s)
    }
    
    /** Select an roll and show information about it. */
    protected void RollSelect(int index) { //[4.1.1] [5.1.1]
        //Check so that the index isn't minus one.
        if (index != -1) {
            //Retrieve rolls.
            ArrayList<String> roll = getSQLSelectMatrix("select RID, namn, beskrivning, onskatharfarg, onskatkon, onskatalder, onskatlangd, onskatvikt, sid, pid"
                    + " from roll where lower(namn)='" + ECAForm.jLstSkapaOchUppdateraRollLista.getItem(index).toLowerCase() + "'").get(0);
            
            //Write information out.
            ECAForm.jTxtSkapaOchUppdateraRollRID.setText(roll.get(0));
                ECAForm.jTxtSkapaOchUppdateraRollNamn.setText(Text.getSpecialCharacters(roll.get(1)));
                ECAForm.jTxtSkapaOchUppdateraRollBeskrivning.setText(Text.getSpecialCharacters(roll.get(2)));
                ECAForm.jTxtSkapaOchUppdateraRollAlder.setText(roll.get(5));
                ECAForm.jTxtSkapaOchUppdateraRollLangd.setText(roll.get(6));
                ECAForm.jTxtSkapaOchUppdateraRollVikt.setText(roll.get(7));
            //Show a list of skådespelare which you can select items from
                ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.select(-1); //Deselect item, just in case.
            if (ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare != null || ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getItems().length > 0) {
                for (int i = 0; i < ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getItems().length; i++) {
                    if (SQLSelect("select skadespelare.namn from skadespelare where skadespelare.sid =" + roll.get(8)).equalsIgnoreCase( //[4.1.1]
                        ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.getItem(i))) {
                        ECAForm.jLstSkapaOchUppdateraRollListaSkadespelare.select(i);
                        break;
                    }
                }
            }

            //Show a list of produktioner which you can select items from
            ECAForm.jLstSkapaOchUppdateraRollListaProduktion.select(-1); //Deselect item, just in case.
            if (ECAForm.jLstSkapaOchUppdateraRollListaProduktion != null || ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getItems().length > 0) {
                for (int i = 0; i < ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getItems().length; i++) {
                    if (SQLSelect("select produktion.titel from produktion where produktion.pid =" + roll.get(9)).equalsIgnoreCase( //[5.1.1]
                        ECAForm.jLstSkapaOchUppdateraRollListaProduktion.getItem(i))) {
                        ECAForm.jLstSkapaOchUppdateraRollListaProduktion.select(i);
                        break;
                    }
                }
            }

            ECAForm.jCmbBoxSkapaOchUppdateraRollKon.setSelectedItem(Person.getKon(Text.parseNumber(roll.get(4))).name());
            ECAForm.jCmbBoxSkapaOchUppdateraRollHarfarg.setSelectedItem(roll.get(3));

            ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.removeAll();
            ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.removeAll();

            ArrayList<String> harFormagor = getRoll().getFormagorFromRID(Text.parseNumber(roll.get(0)));

            for (String formaga : getFormaga().getFormagor()) {
                boolean exists = false;
                for (String harFID : harFormagor) {
                    if (harFID.equalsIgnoreCase(formaga.toString())) {
                        exists = true;
                    }
                }

                if (exists) {
                    ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.add(formaga);
                } else {
                    ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.add(formaga);
                }
            }
        }
    }
    
    protected void ClickSkapaOchUppdateraSkadespelareFormagaLaggTill() {
        if (ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.isEnabled()) {
        MoveFromListToList(ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor, ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar);
        }
    }
    
    protected void ClickSkapaOchUppdateraSkadespelareFormagaTaBort() {
        if (ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.isEnabled()) {
            MoveFromListToList(ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar, ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor);
        }
    }
 
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Skådespelare">
    protected void SkadespelareResetValidateColors() {
        //Reset error colors
        ECAForm.jLblSkapaOchUppdateraSkadespelareNamn.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraSkadespelareKon.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraSkadespelareHarfarg.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraSkadespelareOgonfarg.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraSkadespelareAlder.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraSkadespelareLangd.setForeground(Color.black);
        ECAForm.jLblSkapaOchUppdateraSkadespelareVikt.setForeground(Color.black);
    }
    
    /** Validate the textboxes on roll.
     * @return on error return false
     */
    protected boolean SkadespelareValidateInput() {
        //Check if the input the user name is valid.
        //Check for errors.
        boolean errorOccurred = false;
        
        //Reset error label
        ECAForm.jLblSkapaOchUppdateraProduktionError.setText("");
        
        SkadespelareResetValidateColors();
        
        //If an error has occurred, errorOccurred will be true, always. Otherwise it'll stay false.
        //What this means is if it's true, it'll be true next time and next time and so on. If it's false, it could always change state to true if the validation would return an error (true).
        errorOccurred |= Validate.Object(ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn, ECAForm.jLblSkapaOchUppdateraSkadespelareNamn);
        errorOccurred |= Validate.Object(ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon, ECAForm.jLblSkapaOchUppdateraSkadespelareKon);
        errorOccurred |= Validate.Object(ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg, ECAForm.jLblSkapaOchUppdateraSkadespelareHarfarg);
        errorOccurred |= Validate.Object(ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg, ECAForm.jLblSkapaOchUppdateraSkadespelareOgonfarg);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder, ECAForm.jLblSkapaOchUppdateraSkadespelareAlder);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd, ECAForm.jLblSkapaOchUppdateraSkadespelareLangd);
        errorOccurred |= Validate.Number(ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt, ECAForm.jLblSkapaOchUppdateraSkadespelareVikt);
        errorOccurred |= Validate.Object(ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent, ECAForm.jLblSkapaOchUppdateraSkadespelareError, "<html>Du måste välja en agent.</html>");
        
        //If a problem was found, make the labels with errors red, and don't continue otherwise it's all correct.
        if (errorOccurred) {
            ECAForm.jLblSkapaOchUppdateraSkadespelareError.setText("<html>Det har uppstått fel, vänligen <br>kontrollera så att allting stämmer.</html>");
            return false; //Errors occurred during the validation, show errors and return.
        }
        return true; //Completed without errors.
    }

    /** Change between an editable or viewable view mode. */
    protected void SkadespelareRefreshTabValues() {
        //Refreshes the tab skådespelare.
        //Used to keep the index of the lists.
        int selectedSkadespelare = ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getSelectedIndex();
        int selectedSkadespelareAgent = ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getSelectedIndex();
        //Update list for skådespelare.
        ECAForm.jLstSkapaOchUppdateraSkadespelareLista.removeAll();
        for (String i : getSkadespelare().getSkadespelare()) {
            ECAForm.jLstSkapaOchUppdateraSkadespelareLista.add(i);
        }

        //Update list for roller in skådespelare.
        ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.removeAll();
        for (String i : getAgent().getAgenter()) {
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.add(i);
        }

        //This is to keep the index of the lists.
        if (ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getItemCount() >= selectedSkadespelare) {
            ECAForm.jLstSkapaOchUppdateraSkadespelareLista.select(selectedSkadespelare);
        }

        if (ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getItemCount() >= selectedSkadespelareAgent) {
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.select(selectedSkadespelareAgent);
        }
    }

    /**
     * Reset the tab skådespelare.
     */
    protected void SkadespelareResetFields() {
        //Reset text
        ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.setText("");
        ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder.setText("");
        ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd.setText("");
        ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt.setText("");
        ECAForm.jTxtSkapaOchUppdateraSkadespelareShowAgent.setText("");
        ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.setText("");

        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon.setSelectedItem("Välj");
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg.setSelectedItem("Välj");
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg.setSelectedItem("Välj");
        
        ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.removeAll();
        ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.removeAll();
        
        for (String formagor : getFormaga().getFormagor()) {
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.add(formagor);
        }
        
        ECAForm.jLstSkapaOchUppdateraSkadespelareLista.select(-1);
        
        SkadespelareResetValidateColors();
    }
    
    /** Change between an editable or viewable view mode. */
    protected void SkadespelareEditable(boolean view) {
        //Change between editable view and locked view.
        ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd.setEditable(view);
        ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt.setEditable(view);
        
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon.setEnabled(view);
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg.setEnabled(view);
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg.setEnabled(view);
        
        ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.setEnabled(view);
        ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.setEnabled(view);
        
        ECAForm.jLstSkapaOchUppdateraSkadespelareLista.setEnabled(!view);
        
        ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.setVisible(view);
        ECAForm.jLblSkapaOchUppdateraSkadespelareListaAgent.setVisible(view);
        
        //If view == true then change the background color color to 255, and if it's false, change to the backgrond color 238
        Color bColor = view ? new Color(255,255,255) : new Color(238, 238, 238);
        
        //Set colors.
        ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.setBackground(bColor);
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon.setBackground(bColor);
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg.setBackground(bColor);
        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd.setBackground(bColor);
        ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt.setBackground(bColor);
    }

    protected void SkadespelareRefreshSelection() {
        if (ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getSelectedIndex() != -1) {
            SkadespelareSelect(ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getSelectedIndex());
        }
    }

    protected void SkadespelareSelect(int index) { //[3.1.1]
        if (index != -1) {
            ArrayList<String> skadespelare = getSQLSelectMatrix("select SID, namn, kon, alder, langd, vikt, harfarg, ogonfarg, AID"
                    + " from skadespelare where lower(namn)='" + ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getItem(index).toLowerCase() + "'").get(0);

            ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.setText(Text.getSpecialCharacters(skadespelare.get(1)));
            ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder.setText(skadespelare.get(3));
            ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd.setText(skadespelare.get(4));
            ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt.setText(skadespelare.get(5));

            ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon.setSelectedItem(Person.getKon(Text.parseNumber(skadespelare.get(2))).name());
            ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg.setSelectedItem(skadespelare.get(6));
            ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg.setSelectedItem(skadespelare.get(7));

            ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.setText(skadespelare.get(0));
            ECAForm.jTxtSkapaOchUppdateraSkadespelareShowAgent.setText(getSQLSelect("select agent.namn from agent where agent.AID=" + Text.parseNumber(skadespelare.get(8))));

            //Avmarkera rollen i listan först, utifall att..
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.select(-1);
            //Markera roll i listan
            if (ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent != null || ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getItems().length > 0) {
                for (int i = 0; i < ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getItems().length; i++) {
                    if (SQLSelect("select agent.namn from agent where agent.aid =" + skadespelare.get(8)).equalsIgnoreCase( //[3.1.1]
                        ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getItem(i))) {
                        ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.select(i);
                        break;
                    }
                }
            }
            
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.removeAll();
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.removeAll();
            
            ArrayList<String> harFormagor = getSkadespelare().getFormagorFromSID(Text.parseNumber(skadespelare.get(0)));

            for (String formaga : getFormaga().getFormagor()) {
                boolean exists = false;
                for (String harFID : harFormagor) {
                    if (harFID.equalsIgnoreCase(formaga.toString())) {
                        exists = true;
                    }
                }
                
                if (exists) {
                    ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.add(formaga);
                } else {
                    ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.add(formaga);
                }
            }
        }
    }

    /** When the first button is pressed. */
    protected void ClickSkapaOchUppdateraSkadespelareFirstButton() {
        //Update a skådespelare with information.
        //Check for input errors. If something is wrong, show what is wrong and cancel this operation.
        
        if (ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.getText().equalsIgnoreCase("Lägg till skådespelare")) {
            //Validate input
            if (!SkadespelareValidateInput()) return;
            
            //Check if the skådespelare already exists.
            if (getSkadespelare().exists(ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.getText())) return;
            
            //ECAForm.jTxtSkapaOchUppdateraSkadespelareShowAgent.setText("");
            getSkadespelare().insert(ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.getText(),
                ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg.getSelectedItem().toString(),
                ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon.getSelectedItem().toString(),
                ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg.getSelectedItem().toString(),
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder.getText()),
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd.getText()),
                Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt.getText()),
                Text.parseNumber(getSQLSelect("select agent.AID from agent where agent.namn='" + ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getSelectedItem().toString() + "'")));
            
            //Add the connection between skådespelare and förmåga, double checking so that it doesn't already exist.
            for (String selectedFormaga : ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.getItems()) {
                if (!getSkadespelare_Har_Formaga().exists(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()), getFormaga().getFormagaFID(selectedFormaga))) {
                    getSkadespelare_Har_Formaga().insertFormagaToSkadespelare(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()), getFormaga().getFormagaFID(selectedFormaga));
                }
            }
            
            ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.setText("Ändra skådespelare");
            ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.setText("Lägg till skådespelare");
            ECAForm.jTxtSkapaOchUppdateraSkadespelareShowAgent.setVisible(true);
            ECAForm.jLblSkapaOchUppdateraSkadespelareShowAgent.setVisible(true);
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.setEnabled(true);
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.setEnabled(true);

            SkadespelareEditable(false); //Switch to locked view.
            SkadespelareResetFields(); //Reset fields.
            SkadespelareRefreshTabValues(); //Refresh lists.
            SkadespelareRefreshSelection(); //Refresh currect skådespelare selection.
        }
        else if (ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.getText().equalsIgnoreCase("Spara skådespelare") && 
                ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.getText().equalsIgnoreCase("Avbryt")) {
            if (ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getSelectedIndex() == -1) {
                return;
            }

            if (!SkadespelareValidateInput()) return;
            
            //
            if (Text.parseNumber(getSQLSelect("select skadespelare.sid from skadespelare where skadespelare.namn='" + ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.getText() + "'")) == Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText())
                    || !getSkadespelare().exists(ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.getText())) {

                getSkadespelare().update(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()),
                        ECAForm.jTxtSkapaOchUppdateraSkadespelareNamn.getText(),
                        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareHarfarg.getSelectedItem().toString(),
                        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareKon.getSelectedItem().toString(),
                        ECAForm.jCmbBoxSkapaOchUppdateraSkadespelareOgonfarg.getSelectedItem().toString(),
                        Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareAlder.getText()),
                        Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareLangd.getText()),
                        Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareVikt.getText()),
                        Text.parseNumber(getSQLSelect("select agent.AID from agent where agent.namn='" + ECAForm.jLstSkapaOchUppdateraSkadespelareListaAgent.getSelectedItem().toString() + "'")));
                
                //When updating check if the connection between skådespelare and förmåga exists, if it's not, add the connection.
                for (String selectedFormaga : ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.getItems()) {
                    if (!getSkadespelare_Har_Formaga().exists(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()), getFormaga().getFormagaFID(selectedFormaga))) {
                        getSkadespelare_Har_Formaga().insertFormagaToSkadespelare(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()), getFormaga().getFormagaFID(selectedFormaga));
                    }
                }
                
                //When updating check if a connection between skådespelare and förmåga exists, and if the user wants to remove them, if it does exist, remove it.
                for (String notSelectedFormaga : ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.getItems()) {
                    if (getSkadespelare_Har_Formaga().exists(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()), getFormaga().getFormagaFID(notSelectedFormaga))) {
                        getSkadespelare_Har_Formaga().deleteFormagaFromSkadespelare(Text.parseNumber(ECAForm.jTxtSkapaOchUppdateraSkadespelareShowSID.getText()), getFormaga().getFormagaFID(notSelectedFormaga));
                    }
                }
                
                ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.setText("Ändra skådespelare");
                ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.setText("Lägg till skådespelare");

                SkadespelareRefreshTabValues(); //Refresh lists.
                SkadespelareEditable(false); //Switch to locked mode.
                SkadespelareRefreshSelection(); //Refresh currect selection values.
            }
        }
        else if (ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.getText().equalsIgnoreCase("Ändra skådespelare")) {
            if (!SkadespelareValidateInput()) return;
            ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.setText("Spara skådespelare");
            ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.setText("Avbryt");
            SkadespelareEditable(true); //Switch to editable mode.
        }
    }

    /**
     * When jBtnSkapaOchUppdateraSkadespelareEditeraActionPerformed is clicked
     */
    protected void ClickSkapaOchUppdateraSkadespelareSecondButton() {
        //When starting an edit on a skådespelare.
        if (ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.getText().equalsIgnoreCase("Lägg till skådespelare")) {
            ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.setText("Lägg till skådespelare");
            ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.setText("Avbryt");
            ECAForm.jLstSkapaOchUppdateraSkadespelareLista.select(-1);
            ECAForm.jTxtSkapaOchUppdateraSkadespelareShowAgent.setVisible(false);
            ECAForm.jLblSkapaOchUppdateraSkadespelareShowAgent.setVisible(false);
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.setEnabled(false);
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.setEnabled(false);
            SkadespelareEditable(true); //Switch to editable mode.
        } else if (ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.getText().equalsIgnoreCase("Avbryt")) { //Ändra skådespelare
            ECAForm.jTxtSkapaOchUppdateraSkadespelareShowAgent.setVisible(true);
            ECAForm.jLblSkapaOchUppdateraSkadespelareShowAgent.setVisible(true);
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagor.setEnabled(true);
            ECAForm.jLstSkapaOchUppdateraSkadespelareListaFormagorHar.setEnabled(true);
            ECAForm.jBtnSkapaOchUppdateraSkadespelareFirst.setText("Ändra skådespelare");
            ECAForm.jBtnSkapaOchUppdateraSkadespelareSecond.setText("Lägg till skådespelare");
            SkadespelareEditable(false); //Switch to locked mode.
        }
        else { //Ändra skådspelare
            //ECAForm.jBtnSkapaOchUppdateraSkadespelareUppdatera.setText("Ändra skådespelare");
            //SkadespelareSetEditMode();

        }
        SkadespelareRefreshTabValues(); //Refresh lists
    }

    //Clean all fields when clicking on the rensa fält button.
    protected void ClickSkapaOchUppdateraSkadespelareRensaFalt() {
        SkadespelareResetFields();
    }
    
    protected void ClickSkapaOchUppdateraRollerFormagaLaggTill() {
        if (ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor.isEnabled()) {
            MoveFromListToList(ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor, ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor);
        }
    }
    
    protected void ClickSkapaOchUppdateraRollerFormagaTaBort() {
        if (ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor.isEnabled()) {
            MoveFromListToList(ECAForm.jLstSkapaOchUppdateraRollerListaTillagdaFormagor, ECAForm.jLstSkapaOchUppdateraRollerListaIckeTillagdaFormagor);
        }
    }
    
    //Det stog inget om att ta bort något från databasen.
    /*protected void ClickSkapaOchUppdateraSkadespelareTaBort() {
        //Need to fix relationships that's linked to this skadespelaren.
        if (ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getSelectedIndex() != -1) {
            int sid = Text.parseNumber(getSQLSelect("select SID"
                        + " from skadespelare where lower(namn)='" + 
                                                ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getItem(
                                                                ECAForm.jLstSkapaOchUppdateraSkadespelareLista.getSelectedIndex()).toLowerCase() + "'"));

            getSkadespelare().delete(sid);
        }
    }*/
    // </editor-fold>
// </editor-fold>
}
